{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "实验项目名称：K近邻算法编程与实现  \n",
    "实验内容：基于K近邻算法实现指定数据集的回归分析  \n",
    "要求：  \n",
    "（1）读取训练nn_reg_train.csv和nn_reg_test.csv数据文件  \n",
    "（2）生成训练集和测试集X_train,y_train,X_test,y_test  \n",
    "（3）当weights=\"distance\",K=[1,2,...,100]时  \n",
    "   利用KNeighborsRegressor训练模型  \n",
    "（4）绘制不同K值下的回归sores曲线，寻找最佳K值  \n",
    "（5）绘制最佳K值下的y_test和y_pred曲线  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 导入依赖库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.neighbors import KNeighborsRegressor\n",
    "from sklearn.metrics import r2_score,mean_squared_error"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 导入训练集文件数据 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>-10.000000</td>\n",
       "      <td>3.003379</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.251256</td>\n",
       "      <td>-9.899497</td>\n",
       "      <td>3.114083</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.502513</td>\n",
       "      <td>-9.798995</td>\n",
       "      <td>3.039868</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.753769</td>\n",
       "      <td>-9.698492</td>\n",
       "      <td>3.060130</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.005025</td>\n",
       "      <td>-9.597990</td>\n",
       "      <td>2.890098</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>195</th>\n",
       "      <td>48.994975</td>\n",
       "      <td>9.597990</td>\n",
       "      <td>6.786919</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>196</th>\n",
       "      <td>49.246231</td>\n",
       "      <td>9.698492</td>\n",
       "      <td>6.533328</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>197</th>\n",
       "      <td>49.497487</td>\n",
       "      <td>9.798995</td>\n",
       "      <td>7.539849</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>198</th>\n",
       "      <td>49.748744</td>\n",
       "      <td>9.899497</td>\n",
       "      <td>7.379129</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>199</th>\n",
       "      <td>50.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>7.608623</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>200 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             0          1         2\n",
       "0     0.000000 -10.000000  3.003379\n",
       "1     0.251256  -9.899497  3.114083\n",
       "2     0.502513  -9.798995  3.039868\n",
       "3     0.753769  -9.698492  3.060130\n",
       "4     1.005025  -9.597990  2.890098\n",
       "..         ...        ...       ...\n",
       "195  48.994975   9.597990  6.786919\n",
       "196  49.246231   9.698492  6.533328\n",
       "197  49.497487   9.798995  7.539849\n",
       "198  49.748744   9.899497  7.379129\n",
       "199  50.000000  10.000000  7.608623\n",
       "\n",
       "[200 rows x 3 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train=pd.read_csv(\"./data/nn_reg_train.csv\",header=None)\n",
    "df_train"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 导入测试集文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.350133</td>\n",
       "      <td>-10.239371</td>\n",
       "      <td>2.863442</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.209960</td>\n",
       "      <td>-10.290831</td>\n",
       "      <td>2.801287</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.697229</td>\n",
       "      <td>-9.194257</td>\n",
       "      <td>2.903997</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.154239</td>\n",
       "      <td>-9.049417</td>\n",
       "      <td>3.107480</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.892722</td>\n",
       "      <td>-9.350229</td>\n",
       "      <td>3.164975</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>47.551212</td>\n",
       "      <td>9.171792</td>\n",
       "      <td>7.063819</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>48.424441</td>\n",
       "      <td>9.765263</td>\n",
       "      <td>6.889295</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>48.762513</td>\n",
       "      <td>9.962576</td>\n",
       "      <td>6.947982</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>49.436264</td>\n",
       "      <td>9.409351</td>\n",
       "      <td>7.074984</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>50.278616</td>\n",
       "      <td>9.854930</td>\n",
       "      <td>7.579977</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>100 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            0          1         2\n",
       "0    0.350133 -10.239371  2.863442\n",
       "1    0.209960 -10.290831  2.801287\n",
       "2    0.697229  -9.194257  2.903997\n",
       "3    1.154239  -9.049417  3.107480\n",
       "4    1.892722  -9.350229  3.164975\n",
       "..        ...        ...       ...\n",
       "95  47.551212   9.171792  7.063819\n",
       "96  48.424441   9.765263  6.889295\n",
       "97  48.762513   9.962576  6.947982\n",
       "98  49.436264   9.409351  7.074984\n",
       "99  50.278616   9.854930  7.579977\n",
       "\n",
       "[100 rows x 3 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_test = pd.read_csv(\"./data/nn_reg_test.csv\",header=None)\n",
    "df_test"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 生成X_train,y_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train1=df_train.values\n",
    "X_train = df_train1[:,:2]\n",
    "y_train = df_train1[:,2]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 生成X_test和y_test "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_test1 = df_test.values\n",
    "X_test = df_test1[:,:2]\n",
    "y_test = df_test1[:,2]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 设置训练模型参数 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([  1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,\n",
       "        14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,\n",
       "        27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,\n",
       "        40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,\n",
       "        53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  64,  65,\n",
       "        66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,\n",
       "        79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,\n",
       "        92,  93,  94,  95,  96,  97,  98,  99, 100])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.arange(1,101)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "knn_reg = KNeighborsRegressor(n_neighbors=100,\\\n",
    "                              weights=\"distance\"\\\n",
    "                             )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 训练模型 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "KNeighborsRegressor(n_neighbors=100, weights='distance')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "knn_reg.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.95642039777665"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "knn_reg.score(X_test,y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0.9586016712686439,\n",
       " 0.9751741231420532,\n",
       " 0.9827644284579699,\n",
       " 0.9849301639934861,\n",
       " 0.9860445192448739,\n",
       " 0.987184325692374,\n",
       " 0.9867064719957953,\n",
       " 0.9878500923837064,\n",
       " 0.9879314799517037,\n",
       " 0.9879030693396357,\n",
       " 0.9879374974340169,\n",
       " 0.9878305063642289,\n",
       " 0.9871654416649479,\n",
       " 0.9871258177685506,\n",
       " 0.9869124738448376,\n",
       " 0.9863396605938005,\n",
       " 0.985564423963497,\n",
       " 0.9851138354926847,\n",
       " 0.9842806118735221,\n",
       " 0.9837623210775446,\n",
       " 0.9827425970887799,\n",
       " 0.9821753839940895,\n",
       " 0.981174276689047,\n",
       " 0.9804076641251528,\n",
       " 0.9795509433703694,\n",
       " 0.9788710533172628,\n",
       " 0.9778363119277778,\n",
       " 0.9771537430595899,\n",
       " 0.9762149733933758,\n",
       " 0.9757040967102917,\n",
       " 0.9747438461592507,\n",
       " 0.9742814559944196,\n",
       " 0.9734982143415243,\n",
       " 0.9731255799245144,\n",
       " 0.9724729776281413,\n",
       " 0.9722971845797295,\n",
       " 0.9716755608328174,\n",
       " 0.9715947542522292,\n",
       " 0.9710595309891079,\n",
       " 0.9710447984705196,\n",
       " 0.9706746733897995,\n",
       " 0.9707151040986346,\n",
       " 0.9704375454981091,\n",
       " 0.9704875354526269,\n",
       " 0.970189954116684,\n",
       " 0.9702196025252191,\n",
       " 0.9700858246915688,\n",
       " 0.9702068026546428,\n",
       " 0.9699645548065817,\n",
       " 0.9699530526573935,\n",
       " 0.9696956789849711,\n",
       " 0.9696407076054583,\n",
       " 0.9693288977673956,\n",
       " 0.9692820298194629,\n",
       " 0.968940573725257,\n",
       " 0.9687841531705895,\n",
       " 0.9684277451358138,\n",
       " 0.9683102731472848,\n",
       " 0.967978924593213,\n",
       " 0.9677039230413322,\n",
       " 0.9673899253837621,\n",
       " 0.9671433979207417,\n",
       " 0.966883039300007,\n",
       " 0.9665610378786128,\n",
       " 0.9662382687306184,\n",
       " 0.9659149697721627,\n",
       " 0.9655377182529874,\n",
       " 0.9652441737079441,\n",
       " 0.9648735232761069,\n",
       " 0.964537574516072,\n",
       " 0.9641719718790683,\n",
       " 0.9638819467907223,\n",
       " 0.9634838478731999,\n",
       " 0.9631315758850838,\n",
       " 0.962755593121436,\n",
       " 0.9623796075035362,\n",
       " 0.962022397696225,\n",
       " 0.9617120886499007,\n",
       " 0.9612968611865242,\n",
       " 0.9609702924308073,\n",
       " 0.960569935036373,\n",
       " 0.9602521618538388,\n",
       " 0.9598595237529345,\n",
       " 0.959582044021824,\n",
       " 0.959266272572034,\n",
       " 0.9589817375191948,\n",
       " 0.9586411445149435,\n",
       " 0.9584139625831501,\n",
       " 0.958156761067251,\n",
       " 0.9580142972163744,\n",
       " 0.9578278626518189,\n",
       " 0.9576618594673023,\n",
       " 0.9574868868671396,\n",
       " 0.9573622187453288,\n",
       " 0.9572266090612149,\n",
       " 0.9570842106776468,\n",
       " 0.9568877795460091,\n",
       " 0.9567765977731548,\n",
       " 0.9565912803792579,\n",
       " 0.95642039777665]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "res = []\n",
    "max_score = 0\n",
    "max_k = 0\n",
    "for k in range(1, 101):\n",
    "    knn_reg = KNeighborsRegressor(n_neighbors=k,\n",
    "                                  weights=\"distance\",\n",
    "                                  metric=\"minkowski\",\n",
    "                                  p=2)\n",
    "    knn_reg.fit(X_train, y_train)\n",
    "    tmp_score = knn_reg.score(X_test, y_test) \n",
    "    res.append(tmp_score)\n",
    "    if tmp_score > max_score:\n",
    "        max_score = tmp_score\n",
    "        max_k = k\n",
    "res"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## K值曲线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.rcParams[\"font.family\"] = \"SimHei\"\n",
    "plt.plot(np.linspace(0,100,100),res,\"-r\",lw=1.5)\n",
    "plt.plot(max_k,res[max_k],\"ks\")\n",
    "plt.xlabel(\"k值\",fontsize = 12)\n",
    "plt.ylabel(\"模型拟合率\",fontsize = 12)\n",
    "k_ann_max = '['+str(max_k)+' '+str(res[max_k])+']'\n",
    "plt.annotate(k_ann_max,xy=(max_k,res[max_k]),xytext=(max_k,res[max_k]))\n",
    "plt.grid()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 绘制曲线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "knn_reg=KNeighborsRegressor(n_neighbors=max_k,weights=\"distance\")\n",
    "knn_reg.fit(X_train,y_train)\n",
    "y_pred = knn_reg.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'y值')"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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402bjO9xxgS/UT8dQv6HGZhWmjFbTXRdV8HRVdC1K4TUuWdS+9buc9E0xGazNfguf7bjjT2nIX/+85957LHHmDZtGp9++ikjR47kqaeeIjExkZKSEmynjcgXFhZyySWX8PzzzwPw/fffExkZyeTJk/nmm28ICgpi7NixeDweLr/8cgD+/ve/s3nzZoKDgzGbzdxzzz3ExcUREBAAwAcffEBERES9Zbzuuuu45pprOHbsmDevy4oVK3jkkUe8M3leeOGFM16Xn5/P22+/zWOPPcasWbPIrtF9JSLcc889TJs2jUmTJjFz5syz5ozZuXMnTzzxRK3H2rnL6XTimOUgOz0bT4CHrIuA8ZCdDIHrW6nrrmoXuQsvZM/xPSwLzebeUfDi7R8SOGcOuz3Q72GYuxXeWp7fOmXyId0B2gJfffUVW7ZsYc6cOWRnZ/Phhx/y1FNPERQUxOOPP86MGTNqzfnOz88nMzOT22+/nRdeeIHdu3eTmJhIaWkpd911F88++ywvvPACH330EV27diUpKYkHHniA8PBw7r33Xp555hnuuusuEhMTsVgsXHXVVbzwwgv06tULMFr8F110EbGxsbz++uve+5pMJkSEL7/80tuCvuKKK0hLS2PlypXMnj2bXr168e2335KamorD4SAiIoL58+ezadMm71hA1T0+++wzJkyYwMmTJ3nmmWdITk5m5MiRvPjii2cs5hIR76eMMWPGsG7dOu/XmDFj8Hg8jV5pq3UujlkOssKycD/oRirw9ndLPFSUuKA1FsSlpkJkJISG8rfkvyHA/ZsD4V//IlYpXgaGHoWV59ExF0DVN72mtb/Gjh1b5xSg9jxNLi0tTf7973+LiMj06dPlvffeExGRo0ePyj333CNut1uio6MlISFBRER2794tn332mYiIfP/997WmOIqIzJkzR7p06SKHDh2SkydPSkJCgjz88MOyc+dOERF5+eWX5b777hMRkfLycvnoo4/k1ltvlfz8fBERee2116S0tNRbtuzsbBER2b9/v1x33XWyYMECOX78uPd+//u//ysTJkyQv/71r3Ly5MlaZdm0aZNceeWV8otf/EJERDwej9x7773Sp08fcTgcsmLFilrn79mzR6699lpvXasMHTpUFi5cKBMmTDhjKubkyZNl4sSJ8s4779T7O27Pf3+tZcwBZuF3CE8g9EO4BOPx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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.rcParams[\"font.family\"] = \"SimHei\"\n",
    "plt.plot(np.linspace(0,100,100),y_test,\".-r\",lw=1.5,mec=\"k\",ms=8)\n",
    "plt.plot(np.linspace(0,100,100),y_pred,\".-g\",lw=1.5,mec=\"k\",ms=8)\n",
    "plt.legend([\"测试集的真实值\",\"测试集的预测值\"],loc=0,numpoints=3,fontsize=12)\n",
    "plt.xlabel(\"样本个数\",fontsize=12)\n",
    "plt.ylabel(\"y值\",fontsize=12)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
